package com.briup.jz.service.impl;


import com.briup.jz.bean.Product;
import com.briup.jz.bean.ProductExample;
import com.briup.jz.dao.ProductMapper;
import com.briup.jz.service.IProductService;
import com.briup.jz.utils.CustomerException;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class ProductImpl implements IProductService {
    @Resource
    private ProductMapper productMapper;
    @Override
    public void saveOrUpdate(Product product) throws CustomerException {
//        判断用户是否输入id
        if (product.getId()==null){
//            没人输入则为更新操作
            productMapper.insert(product);
        }else {
//            有id则为更改操作
            productMapper.updateByPrimaryKey(product);
        }
    }

    @Override
    public void deleteById(Long id) throws CustomerException {
//        根据主键查询产品信息
        Product product=productMapper.selectByPrimaryKey(id);
//        如果没有该产品信息则抛出异常
        if (product==null){
            throw  new CustomerException("没有该产品");
        }
//        执行删除操作
        productMapper.deleteByPrimaryKey(id);
    }

    @Override
    public List<Product> query(Long id) {
        ProductExample example=new ProductExample();
//        判断是否输入id值
        if (id!=null){
//            添加根据id查找条件
            example.createCriteria().andIdEqualTo(id);
        }
//        执行查询操作
        return productMapper.selectByExample(example);
    }

    @Override
    public void offline(Long id) {
//        根据id查找该产品
       Product product=productMapper.selectByPrimaryKey(id);
       if (product==null){
           throw new CustomerException("没有该产品");
       }
//       设置商品属性为下架
       product.setStatus("下架");
//       更新商品属性
       saveOrUpdate(product);
    }

    @Override
    public void online(Long id) {
//        根据id查找该产品
        Product product=productMapper.selectByPrimaryKey(id);
        if (product==null){
            throw new CustomerException("没有该产品");
        }
//       设置商品属性为正常
        product.setStatus("正常");
//       更新商品属性
        saveOrUpdate(product);
    }
}
